#pragma once

#include "../engine/GameObject.h"
#include "../shared/shared_types.h"
#include <list>

namespace Putin{

struct ProjectileObjectConstants;

/*!
 * \brief
 * A Class that holds bullet information.
 * 
 * A bullet is defined by the implementor and holds 
 * information about missiles, projectiles, bullets etc.
 * 
 */
class Bullet : public GameObject
{
public:

	Bullet();
	virtual ~Bullet();


public: // should prob. be wrapped with getter/setter


	ProjectileObjectConstants*  mProjectileObjectConstants; /*! Physical properties */

	Vec3f						mTargetLoc; /*! The target in world space */
	int							mTargetObj; /*! The target, if an object. Otherwise 0*/

	bool						mVisible; /*! true if we should also render this projectile */
	int							mType; /*! if we need type information, maybe remove this*/
	int							mOwner; /*! owner unit. The one who shot the bullet*/

	bool						mHasExploded;
	std::vector<int>			mUnitsHit;
	std::vector<float>			mDistFromHit;
};
} // End namespace Putin